#ifndef PssSK_H
#define PssSK_H

#include "PowerSystemStabilizerDynamics.hpp"
#include <list>
#include "Boolean.hpp"
#include "Float.hpp"


#include "PU.hpp"
#include "Seconds.hpp"

namespace CIMPP {


	/*
	PSS Slovakian type - three inputs.
	*/
	class PssSK: public PowerSystemStabilizerDynamics
	{

	public:
					CIMPP::PU k1; 	/* Gain P (K1).  Typical Value = -0.3. Default: nullptr */
					CIMPP::PU k2; 	/* Gain fe (K2).  Typical Value = -0.15. Default: nullptr */
					CIMPP::PU k3; 	/* Gain If (K3).  Typical Value = 10. Default: nullptr */
					CIMPP::Seconds t1; 	/* Denominator time constant (T1).  Typical Value = 0.3. Default: nullptr */
					CIMPP::Seconds t2; 	/* Filter time constant (T2).  Typical Value = 0.35. Default: nullptr */
					CIMPP::Seconds t3; 	/* Denominator time constant (T3).  Typical Value = 0.22. Default: nullptr */
					CIMPP::Seconds t4; 	/* Filter time constant (T4).  Typical Value = 0.02. Default: nullptr */
					CIMPP::Seconds t5; 	/* Denominator time constant (T5).  Typical Value = 0.02. Default: nullptr */
					CIMPP::Seconds t6; 	/* Filter time constant (T6).  Typical Value = 0.02. Default: nullptr */
					CIMPP::PU vsmax; 	/* Stabilizer output max limit (Vsmax).  Typical Value = 0.4. Default: nullptr */
					CIMPP::PU vsmin; 	/* Stabilizer output min limit (Vsmin).  Typical Value = -0.4. Default: nullptr */
				
		static const char debugName[];
		virtual const char* debugString();
		
		/* constructor initialising all attributes to null */
		PssSK();
		virtual ~PssSK();
	
		static void addConstructToMap(std::unordered_map<std::string, BaseClass* (*)()>& factory_map);
		static void addPrimitiveAssignFnsToMap(std::unordered_map<std::string, assign_function>&);
		static void addClassAssignFnsToMap(std::unordered_map<std::string, class_assign_function>&);
		static const BaseClassDefiner declare();

	};

	BaseClass* PssSK_factory();
}
#endif
